﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using VLUSM_BusinessLogic.DataTransferObjects;
using System.Collections.ObjectModel;

namespace VLUSM_Service
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IStudentService" in both code and config file together.
    [ServiceContract]
    public interface IStudentService
    {
        #region CauLacBoThamGia
        [OperationContract]
        CauLacBoThamGiaDTO GetCauLacBoThamGiaByID(int IDFilter);
        [OperationContract]
        ObservableCollection<CauLacBoThamGiaDTO> GetCauLacBoThamGiaBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveCauLacBoThamGia(CauLacBoThamGiaDTO objdto);
        [OperationContract]
        void SaveCauLacBoThamGiaList(ObservableCollection<CauLacBoThamGiaDTO> dtolist);
        [OperationContract(Name = "RemoveCauLacBoThamGia")]
        void RemoveCauLacBoThamGia(CauLacBoThamGiaDTO objdto);
        [OperationContract(Name = "RemoveCauLacBoThamGiaByID")]
        void RemoveCauLacBoThamGia(int IDFilter);
        #endregion

        #region HocBong
        [OperationContract]
        HocBongDTO GetHocBongByID(int IDFilter);
        [OperationContract]
        ObservableCollection<HocBongDTO> GetHocBongBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveHocBong(HocBongDTO objdto);
        [OperationContract]
        void SaveHocBongList(ObservableCollection<HocBongDTO> dtolist);
        [OperationContract(Name = "RemoveHocBong")]
        void RemoveHocBong(HocBongDTO objdto);
        [OperationContract(Name = "RemoveHocBongByID")]
        void RemoveHocBong(int IDFilter);
        #endregion

        #region KhenThuong
        [OperationContract]
        KhenThuongDTO GetKhenThuongByID(int IDFilter);
        [OperationContract]
        ObservableCollection<KhenThuongDTO> GetKhenThuongBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveKhenThuong(KhenThuongDTO objdto);
        [OperationContract]
        void SaveKhenThuongList(ObservableCollection<KhenThuongDTO> dtolist);
        [OperationContract(Name = "RemoveKhenThuong")]
        void RemoveKhenThuong(KhenThuongDTO objdto);
        [OperationContract(Name = "RemoveKhenThuongByID")]
        void RemoveKhenThuong(int IDFilter);
        #endregion

        #region KyLuat
        [OperationContract]
        KyLuatDTO GetKyLuatByID(int IDFilter);
        [OperationContract]
        ObservableCollection<KyLuatDTO> GetKyLuatBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveKyLuat(KyLuatDTO objdto);
        [OperationContract]
        void SaveKyLuatList(ObservableCollection<KyLuatDTO> dtolist);
        [OperationContract(Name = "RemoveKyLuat")]
        void RemoveKyLuat(KyLuatDTO objdto);
        [OperationContract(Name = "RemoveKyLuatByID")]
        void RemoveKyLuat(int IDFilter);
        #endregion

        #region HoatDongDoanTheThamGia Methods
        [OperationContract]
        HoatDongDoanTheThamGiaDTO GetHoatDongDoanTheThamGiaByID(int IDFilter);
        [OperationContract]
        ObservableCollection<HoatDongDoanTheThamGiaDTO> GetHoatDongDoanTheThamGiaBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveHoatDongDoanTheThamGia(HoatDongDoanTheThamGiaDTO objdto);
        [OperationContract]
        void SaveHoatDongDoanTheThamGiaList(ObservableCollection<HoatDongDoanTheThamGiaDTO> dtolist);
        [OperationContract]
        void RemoveHoatDongDoanTheThamGia(HoatDongDoanTheThamGiaDTO objdto);
        [OperationContract]
        void RemoveHoatDongDoanTheThamGiaByID(int IDFilter);
        #endregion

        #region HoSoDaNop
        [OperationContract]
        HoSoDaNopDTO GetHoSoDaNopByID(int IDFilter);
        [OperationContract]
        ObservableCollection<HoSoDaNopDTO> GetHoSoDaNopBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SetHoSoDaNopListForSinhVien(int SinhVienID, ObservableCollection<HoSoDaNopDTO> listDTO);
        [OperationContract]
        void UnsetHoSoDaNopListForSinhVien(int SinhVienID, ObservableCollection<HoSoDaNopDTO> listDTO);
        #endregion

        #region NghienCuuKhoaHoc
        [OperationContract]
        NghienCuuKhoaHocDTO GetNghienCuuKhoaHocByID(int IDFilter);
        [OperationContract]
        ObservableCollection<NghienCuuKhoaHocDTO> GetNghienCuuKhoaHocBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveNghienCuuKhoaHoc(NghienCuuKhoaHocDTO objdto);
        [OperationContract]
        void SaveNghienCuuKhoaHocList(ObservableCollection<NghienCuuKhoaHocDTO> dtolist);
        [OperationContract(Name = "RemoveNghienCuuKhoaHoc")]
        void RemoveNghienCuuKhoaHoc(NghienCuuKhoaHocDTO objdto);
        [OperationContract(Name = "RemoveNghienCuuKhoaHocByID")]
        void RemoveNghienCuuKhoaHoc(int IDFilter);
        #endregion

        #region NhatKy
        [OperationContract]
        NhatKyDTO GetNhatKyByID(int IDFilter);
        [OperationContract]
        ObservableCollection<NhatKyDTO> GetNhatKyBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveNhatKy(NhatKyDTO objdto);
        [OperationContract]
        void SaveNhatKyList(ObservableCollection<NhatKyDTO> dtolist);
        [OperationContract(Name = "RemoveNhatKy")]
        void RemoveNhatKy(NhatKyDTO objdto);
        [OperationContract(Name = "RemoveNhatKyByID")]
        void RemoveNhatKy(int IDFilter);
        #endregion

        #region SinhVien
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> GetSinhVienList();
        [OperationContract]
        SinhVienBasicDTO GetSinhVienByID(int IDFilter);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> SearchSinhVien(string Query);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> SearchSinhVienByDonVi(string Query, int DonViID);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> SearchSinhVienByLop(string Query, int LopID);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> GetSinhVienByDonViID(int DonViIDFilter);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> GetSinhVienByLopID(int LopIDFilter);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> GetSinhVienByTenDonVi(string TenDonViFilter);
        [OperationContract]
        ObservableCollection<SinhVienBasicDTO> GetSinhVienByTenLop(string TenLopFilter);
        [OperationContract]
        SinhVienDetailDTO GetSinhVienDetailByID(int IDFilter);
        [OperationContract]
        SinhVienDetailDTO GetSinhVienDetailByTen(string TenFilter);
        [OperationContract]
        SinhVienDetailDTO GetSinhVienDetailByMa(string MaFilter);
        [OperationContract]
        void SaveSinhVien(SinhVienDetailDTO objdto);
        [OperationContract(Name = "RemoveSinhVien")]
        void RemoveSinhVien(SinhVienDetailDTO objdto);
        [OperationContract(Name = "RemoveSinhVienByID")]
        void RemoveSinhVien(int IDFilter);
        #endregion

        #region ThamGiaOlympic
        [OperationContract]
        ThamGiaOlympicDTO GetThamGiaOlympicByID(int IDFilter);
        [OperationContract]
        ObservableCollection<ThamGiaOlympicDTO> GetThamGiaOlympicBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveThamGiaOlympic(ThamGiaOlympicDTO objdto);
        [OperationContract]
        void SaveThamGiaOlympicList(ObservableCollection<ThamGiaOlympicDTO> dtolist);
        [OperationContract(Name = "RemoveThamGiaOlympic")]
        void RemoveThamGiaOlympic(ThamGiaOlympicDTO objdto);
        [OperationContract(Name = "RemoveThamGiaOlympicByID")]
        void RemoveThamGiaOlympic(int IDFilter);
        #endregion

        #region ThayDoiTrongQuaTrinhHoc Methods
        [OperationContract]
        ThayDoiTrongQuaTrinhHocDTO GetThayDoiTrongQuaTrinhHocByID(int IDFilter);
        [OperationContract]
        ObservableCollection<ThayDoiTrongQuaTrinhHocDTO> GetThayDoiTrongQuaTrinhHocBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveThayDoiTrongQuaTrinhHoc(ThayDoiTrongQuaTrinhHocDTO objdto);
        [OperationContract]
        void SaveThayDoiTrongQuaTrinhHocList(ObservableCollection<ThayDoiTrongQuaTrinhHocDTO> dtolist);
        [OperationContract]
        void RemoveThayDoiTrongQuaTrinhHoc(ThayDoiTrongQuaTrinhHocDTO objdto);
        [OperationContract]
        void RemoveThayDoiTrongQuaTrinhHocByID(int IDFilter);

        #endregion

        #region VanBangDuocNhan
        [OperationContract]
        VanBangDuocNhanDTO GetVanBangDuocNhanByID(int IDFilter);
        [OperationContract]
        ObservableCollection<VanBangDuocNhanDTO> GetVanBangDuocNhanBySinhVienID(int SinhVienIDFilter);
        [OperationContract]
        void SaveVanBangDuocNhan(VanBangDuocNhanDTO objdto);
        [OperationContract]
        void SaveVanBangDuocNhanList(ObservableCollection<VanBangDuocNhanDTO> dtolist);
        [OperationContract(Name = "RemoveVanBangDuocNhan")]
        void RemoveVanBangDuocNhan(VanBangDuocNhanDTO objdto);
        [OperationContract(Name = "RemoveVanBangDuocNhanByID")]
        void RemoveVanBangDuocNhan(int IDFilter);
        #endregion
    }
}
